💡 通俗理解
CREATE TABLE 是"盖好了一栋空楼",INSERT 就是"往楼里搬入住户"。
你可以一次搬入
一户,也可以一次搬入
多户,还可以只填
部分信息(比如先登记姓名和房号,电话以后再补)。
📥 插入一行完整记录
INSERT INTO <表名> [(<字段名1>, <字段名2>, ...)]
VALUES (<值1>, <值2>, ...);
INSERT INTO s(sno, sn, sex, age, maj, dept)
VALUES('s9', '郑冬', '女', 21, '计算机', '信息学院');
执行前:学生表 s
| sno | sn | sex | age |
| s1 | 张三 | 男 | 20 |
| s2 | 李四 | 男 | 21 |
| s3 | 王五 | 女 | 19 |
执行后:学生表 s
| sno | sn | sex | age |
| s1 | 张三 | 男 | 20 |
| s2 | 李四 | 男 | 21 |
| s3 | 王五 | 女 | 19 |
| s9 | 郑冬 | 女 | 21 |
!
各数据之间用逗号分隔,字符型和日期型数据要用单引号括起来,数字不需要。
i
如果 INTO 子句中没有指定字段名,则必须按照表定义的字段顺序给每个字段都赋值。
📋 插入部分数据值
只给部分字段赋值,未出现的字段自动填 NULL。
INSERT INTO sc(sno, cno)
VALUES('s7', 'c1');
执行结果:sc 表中新增一行
| sno | cno | score |
| s1 | c1 | 85.00 |
| s1 | c2 | 92.00 |
| s7 | c1 | NULL |
⚠️ 注意
如果某字段定义了
NOT NULL 约束,插入时就
必须给它赋值,否则会报错。只有允许 NULL 的字段才能省略。
📦 一次插入多行记录
INSERT INTO <表名> [(<字段名>, ...)]
VALUES (<值列表1>),
(<值列表2>),
(<值列表3>);
INSERT INTO sc(sno, cno)
VALUES ('s8', 'c1'),
('s8', 'c2'),
('s8', 'c5');
✓
多行插入比写三条 INSERT 效率更高——一条语句搞定,数据库只需提交一次。
🔄 INSERT 和 REPLACE 的区别
💡 通俗理解
INSERT 像"排队入住"——如果房间已有人(主键/UNIQUE 重复),就
拒绝入住。
REPLACE 像"强制入住"——如果房间已有人,就
先把旧住户赶走,再让新住户住进去。
| 对比项 | INSERT | REPLACE |
| 主键 / UNIQUE 冲突时 |
❌ 报错,插入失败 |
🔄 先删除旧记录,再插入新记录 |
| 无冲突时 |
正常插入 |
正常插入(和 INSERT 一样) |
| 使用场景 |
一般情况下用这个 |
需要"有则覆盖,无则插入"时 |
-- 如果 s9 已存在,先删除旧记录,再插入新记录
REPLACE INTO s(sno, sn, sex, age, maj, dept)
VALUES('s9', '郑冬冬', '女', 22, '软件工程', '信息学院');